#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time   : 2021/7/13 20:29
# @Author : cjw
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware

from app.api.api_v1.api import api_router  # 导入蓝图
from app.core.config import settings  # 导入配置文件
from app.db.session import Session  # 导入数据库连接会话

app = FastAPI(title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json")

# CORS（跨域资源共享）配置, 存在则配置，影响所有接口
# 域的概念：协议+域名+端口
if settings.BACKEND_CORS_ORIGINS:
    app.add_middleware(
        CORSMiddleware,
        # allow_origins=['*'], # 允许所有域
        allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
        allow_credentials=True,
        allow_methods=['*'],
        allow_headers=['*'],
    )

app.include_router(api_router, prefix=settings.API_V1_STR)


# 中间件：用作获取数据库连接
@app.middleware("http")
async def db_session_middleware(request: Request, call_next):
    request.state.db = Session()
    response = await call_next(request)
    request.state.db.close()
    return response


if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app, host='0.0.0.0', port=8000, reload=True, debug=True)
